iT邦幫忙

2024 iThome 鐵人賽

DAY 29
0
DevOps

DevOps菜鳥的30天實踐挑戰:從 CI/CD Pipeline 到雲端佈署系列 第 29

Day29 - 佈署 Nginx 靜態網站至 Kubernetes (下):從佈署到自動化管理

  • 分享至 

  • xImage
  •  

在前一天的文章中,我們已經準備好了一個 Nginx 的靜態網站,並且完成了容器化。今天,我們將繼續練習將這個靜態網站佈署到 Kubernetes 叢集中,並且介紹如何通過 Helm 來管理佈署,以及實現一些自動化管理,提升我們應用的可擴展性和運營效率。


佈署到 Kubernetes 叢集

首先,確保已經成功運行 Docker,並且可以使用 kubectl 來操作 Kubernetes。

使用 Kubectl 佈署

切換到我們之前創建的 microservices_project/kubernetes 目錄,並運行以下命令來應用佈署 website-deployment.yaml ,這個文件描述了如何在 Kubernetes 叢集中佈署我們的靜態網站,包含了 Nginx 容器的映像以及相關資源的配置。

kubectl apply -f website-deployment.yaml

驗證佈署狀態

運行成功後,我們可以通過以下命令查看 Deployment 和 Pod 的狀態,,確認 Nginx 容器是否正常運行。

kubectl get deployments
kubectl get pods

使用 Helm 管理佈署

Helm 是 Kubernetes 的包管理工具,通過 Helm 可以將應用的佈署過程模板化,讓佈署、升級、回滾等操作更加方便和自動化。

安裝 Helm

如果還沒有安裝 Helm,可以參考我們的 Day20 文章 使用 Helm 管理 Kubernetes 的應用佈署,瞭解如何安裝與使用。

創建 Helm Chart

在專案目錄中,創建一個新的目錄來存放 Helm Chart

mkdir nginx-website-chart
cd nginx-website-chart

以下命令會自動生成一個基本的 Helm Chart 結構,存放一些預設的模板文件。

helm create website

https://ithelp.ithome.com.tw/upload/images/20241013/20169492GpDlU1iz4D.png

修改 Chart 配置

進入到生成的 Helm Chart 文件夾中,編輯 values.yaml 來適應我們的專案需求。

  • 將 Docker 映像名稱更改為我們之前創建的映像:
image:
  repository: my-static-website
  # This sets the pull policy for images.
  pullPolicy: IfNotPresent
  # Overrides the image tag whose default is the chart appVersion.
  tag: "latest"
  • 編輯副本數量,保持高可用性:
replicaCount: 2

使用 Helm 佈署

在編輯完成 Helm Chart 配置後,可以使用以下命令來佈署:

helm install my-website ./website

這個命令會自動在 Kubernetes 叢集中創建所需的資源,並將靜態網站佈署到叢集中。

https://ithelp.ithome.com.tw/upload/images/20241013/20169492TWEtzbju40.png

我們可以使用以下命令來確認佈署是否成功:

helm list
kubectl get pods

https://ithelp.ithome.com.tw/upload/images/20241013/201694929nlWAHDYeh.png


使用 Kubernetes Ingress 曝露應用

Ingress 提供了一種靈活的方式來管理 HTTP 和 HTTPS 的訪問路徑,我們可以利用它來公開訪問我們的靜態網站。

安裝 Ingress Controller

首先,需要在 Kubernetes 中安裝 Nginx Ingress Controller 或其他適合的 Ingress Controller。安裝方式可以參考 Kubernetes 官方文件。

撰寫 Ingress 配置文件

創建一個名為 website-ingress.yaml 的文件來定義我們的 Ingress 規則

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: website-ingress
spec:
  rules:
  - host: my-static-website.local
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: website-service
            port:
              number: 80

應用 Ingress 配置文件:

kubectl apply -f website-ingress.yaml

這樣我們就可以通過 my-static-website.local 這個域名來訪問我們的靜態網站。


自動化擴展與監控

在 Kubernetes 中,使用 Horizontal Pod Autoscaler (HPA) 可以根據流量負載自動調整 Pod 的副本數量,從而應對突發流量的需求。

配置 Horizontal Pod Autoscaler

創建一個 website-hpa.yaml 文件來定義 HPA 的配置

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: website-hpa
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: website-deployment
  minReplicas: 2
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50

應用 HPA 配置文件:

kubectl apply -f website-hpa.yaml

這樣,我們的靜態網站可以根據 CPU 的使用率來自動調整副本數量,從而確保在高負載時有足夠的資源支撐應用運行。


小結

在今天的文章中,我們完成了

  • 使用 KubectlHelm 來佈署我們的 Nginx 靜態網站到 Kubernetes 叢集
  • 使用 Ingress 來公開訪問應用
  • 使用 Horizontal Pod Autoscaler 實現應用的自動擴展

這些技術都是 DevOps 實踐中不可或缺的部分,能夠有效提升應用的可擴展性與穩定性,有助於我們提高運營效率!


參考文件


上一篇
Day28 - 佈署 Nginx 靜態網站至 Kubernetes (上):從專案設置到容器化
下一篇
Day30 - DevOps 菜鳥的30 天的成長之旅
系列文
DevOps菜鳥的30天實踐挑戰:從 CI/CD Pipeline 到雲端佈署30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言